Here we model an intervention to address malnutrition among ethnic minority groups in Kon Tum, Vietnam. The model follows observations and discussions and some follow up work by partners of the NIFAM (Nutrition Intervention Forecasting and Monitoring) project in 2022 and 2023. The model focuses on the traditional diets of the Ca Dong people of Kon Tum, Vietnam.
The food environments of the Ca Dong people have changed dramatically since they were resettled from ancestral lands for the construction of the Dak Drinh hydropower reservoir in 2013. Food environments have shifted from traditional hunting, wild harvesting, and swidden agriculture, to low-income commodity production, leading to a decline in forests and the loss of traditional food plants and animals. Through transdisciplinary approaches, we engaged eight groups of stakeholders including local party leaders and forest-dependent communities to explore options for supporting diverse and sustainable food environments. We applied participatory exploration of forest food availability and diversity. We model the potential of reforested areas to restore traditional food environment practices.
We assess policy-level land-use planning to understand the transitions from forests to farmlands and their implications for food environments and forest ecology.
Environmental Kuznets Curve and Food Environments
The model follows an environmental Kuznets curve - conversion of diverse forests to monoculture commodity production has resulted in a loss of ecological resources as well as traditional ecological knowledge and customarily governed forest harvests, affecting food choices and livelihoods - the future of these complex forest systems is unclear. The intertwined issues of forests, food environments, poverty, cultural preservation, and sustainable resource protection highlight the complex challenges faced by indigenous communities undergoing resettlement and changes in their food systems.
Together we set out to identify and model possible solutions, including agroforestry interventions in productive zones. Homegarden agroforestry options could be practicable. These gardens could include plants and animal diversity and lead to better nutrition for households and communities. They could also preserve the traditional diets and customs of people who have been displaced or no longer have access to the forest.
Homegarden
agroforestry options as an intervention to improve food environments in
Kon Tum, Vietnam
Our work aims to contribute to the understanding of these challenges and develop evidence-based solutions that balance economic development with ecological and cultural sustainability. By collaborating with local stakeholders and incorporating local ecological knowledge. We aim to support interventions for sustainable diets, biodiversity conservation, and livelihood security in the changing landscapes of Vietnam’s highlands.
We identified and described forest foods in community meetings, through observations and forest walks. The iNaturalist app was also used locally and taught to local people so that they could add to the list of edible forest species.
A test run of the intervention was meant to be carried out by the Social Policy Ecology research Institute (SPERI) in Kon Tum with smallholder farmers of the Ca Dong ethnic minority group. The next phase of the work would have been to test selected species for nutrition and field sites for the potential of growing in homegardens. However, there was a local uprising of indigenous people nit far from our project location. Several people were shot and killed including local political leaders and local ethnic minority people. We were unable to continue our work and instead report on what we learned in this short communication.
Conceptual model of
homegardens and cooking classes as an intervention to improve food
environments in Kon Tum, Vietnam
We use the mcSimulation function to perform a Monte
Carlo simulations to estimate model outputs based on provided parameters
and a model function. The Monte Carlo simulation generates a set of
estimated model outputs based on random input samples, providing a
distribution of potential outcomes.
# Source our model
source("KonTum_Garden_Model.R")
##
## Attaching package: 'decisionSupport'
## The following objects are masked _by_ '.GlobalEnv':
##
## chance_event, discount, vv
# Ensure consistent results with the random number generator
# not for each 'run' of the MC simulation but for
# consistency each time we call on the simulation
set.seed(1234)
garden_simulation_results <- mcSimulation(
estimate = estimate_read_csv("inputs_kontum_garden.csv"),
model_function = kontum_garden_function,
numberOfModelRuns = 1000, #run 1000 times
functionSyntax = "plainNames"
)
Here we present the value for the interventions as a Net Present Value (NPV). However, to be a realistic alternative, these interventions need to provide equivalent income to cassava planting (roughly 20 million VND per ha/yr). We have added a line to the plot to represent this cut off.
source("functions/plot_distributions.R")
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
plot_distributions(mcSimulation_object = garden_simulation_results,
vars = c("NPV_garden", "NPV_no_garden"),
method = 'hist_simple_overlay',
base_size = 7,
x_axis_name = "Comparative NPV outcomes") + geom_vline(xintercept = 90)
We plot the distribution for the decision and frame the projected NPV
gain for the ‘decision’ (distributions for the two options with the NPV
values of the no garden option subtracted from those for
the garden).
plot_distributions(mcSimulation_object = garden_simulation_results,
vars = "decision",
method = 'hist_simple_overlay',
base_size = 7,
x_axis_name = "Relative gain compared to no garden") + geom_vline(xintercept = 90)
Use gt_plt_summary() from {gtExtras}
library(gtExtras)
## Loading required package: gt
library(svglite)
# Subset the outputs from the mcSimulation function (y) to summarize only on the variables that we want.
mcSimulation_summary <- data.frame(garden_simulation_results$x[2:38],
garden_simulation_results$y[1:3])
gt_plt_summary(mcSimulation_summary)
| mcSimulation_summary | ||||||
| 1000 rows x 40 cols | ||||||
| Column | Plot Overview | Missing | Mean | Median | SD | |
|---|---|---|---|---|---|---|
| discount_rate | 0.0% | 6.5 | 6.5 | 0.9 | ||
| size_of_garden | 0.0% | 75.2 | 75.2 | 14.9 | ||
| CV_value | 0.0% | 0.3 | 0.3 | 0.1 | ||
| inflation_rate | 0.0% | 7.5 | 7.5 | 1.5 | ||
| if_community_likes | 0.0% | 0.5 | 0.5 | 0.2 | ||
| if_effective_manage | 0.0% | 0.6 | 0.6 | 0.1 | ||
| if_garden_yield_enough | 0.0% | 0.4 | 0.4 | 0.1 | ||
| if_garden_healthy | 0.0% | 0.7 | 0.7 | 0.1 | ||
| if_effective_training | 0.0% | 0.5 | 0.5 | 0.2 | ||
| if_offer_green_space | 0.0% | 0.7 | 0.7 | 0.1 | ||
| if_reduce_polution | 0.0% | 0.4 | 0.4 | 0.1 | ||
| if_biophysical_good | 0.0% | 0.4 | 0.4 | 0.1 | ||
| equipment_cost | 0.0% | 74.9 | 75.0 | 15.2 | ||
| construction_cost | 0.0% | 22.4 | 22.5 | 4.6 | ||
| garden_designing_costs | 0.0% | 12.5 | 12.4 | 1.5 | ||
| compost_starting | 0.0% | 7.4 | 7.4 | 1.5 | ||
| worm_starting | 0.0% | 3.5 | 3.5 | 0.9 | ||
| livestock_costs | 0.0% | 3.5 | 3.5 | 0.9 | ||
| maintaining_labor | 0.0% | 32.5 | 32.4 | 4.7 | ||
| seed_costs | 0.0% | 1.5 | 1.5 | 0.3 | ||
| fertilizer | 0.0% | 1.5 | 1.5 | 0.3 | ||
| plant_protection | 0.0% | 3.5 | 3.5 | 0.9 | ||
| child_veg_access | 0.0% | 7.5 | 7.5 | 1.5 | ||
| child_healthier_choices | 0.0% | 290.6 | 285.5 | 119.1 | ||
| women_veg_access | 0.0% | 7.5 | 7.5 | 1.6 | ||
| women_healthier_choices | 0.0% | 297.1 | 298.6 | 121.3 | ||
| elderly_veg_access | 0.0% | 7.5 | 7.5 | 1.5 | ||
| elderly_healthier_choices | 0.0% | 299.2 | 292.0 | 119.3 | ||
| others_veg_access | 0.0% | 7.5 | 7.5 | 1.6 | ||
| others_healthier_choices | 0.0% | 303.3 | 301.0 | 119.7 | ||
| green_space_value | 0.0% | 149.9 | 149.1 | 30.8 | ||
| reduce_polution_value | 0.0% | 15.2 | 15.2 | 3.0 | ||
| school_event_value | 0.0% | 29.6 | 29.5 | 12.5 | ||
| if_not_fallow | 0.0% | 0.4 | 0.4 | 0.1 | ||
| value_of_non_garden_land_use | 0.0% | 353.4 | 358.2 | 89.5 | ||
| costs_of_non_garden_land_use | 0.0% | 3.0 | 3.0 | 1.2 | ||
| value_of_fallow_non_garden_land | 0.0% | 34.5 | 34.2 | 8.8 | ||
| NPV_garden | 0.0% | 2,744.8 | 2,695.8 | 777.5 | ||
| NPV_no_garden | 0.0% | 751.9 | 197.1 | 826.5 | ||
| decision | 0.0% | 1,992.9 | 2,098.4 | 1,104.6 | ||
Summary of the savings
summary(garden_simulation_results$y$decision)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1145 1303 2098 1993 2733 5043
Summary of costs
summary(garden_simulation_results$y$total_costs)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 232.2 322.1 343.5 343.8 366.5 447.1
summary(garden_simulation_results$y$Cashflow_garden1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 65.86 338.74 436.00 444.09 539.97 908.71
source("functions/plot_cashflow.R")
plot_cashflow(mcSimulation_object = garden_simulation_results,
cashflow_var_name = "Cashflow_garden")
# Subset the outputs from the mcSimulation function (y) by selecting the correct variables be sure to run the multi_EVPI only on the variables that the we want.
mcSimulation_table <- data.frame(garden_simulation_results$x,
garden_simulation_results$y[1:3])
source("functions/multi_EVPI.R")
evpi <- multi_EVPI(mc = mcSimulation_table, first_out_var = "NPV_garden")
## [1] "Processing 3 output variables. This can take some time."
## [1] "Output variable 1 (NPV_garden) completed."
## [1] "Output variable 2 (NPV_no_garden) completed."
## [1] "Output variable 3 (decision) completed."
source("functions/plot_evpi.R")
plot_evpi(evpi, decision_vars = "decision")
## Warning: There are no variables with a positive EVPI. You probably do not need
## a plot for that.
Here we run a Projection to Latent Structures (PLS) model, a flexible type of regression model. The results of this model can give us some sense of the correlation strength and direction for model variables and our outcome variables.
source("functions/pls_model.R")
pls_result <- pls_model(object = garden_simulation_results,
resultName = names(garden_simulation_results$y)[1],
ncomp = 1)
input_table <- read.csv("inputs_kontum_garden.csv")
source("functions/plot_pls.R")
plot_pls(pls_result, input_table = input_table, threshold = 0)
The full repository can be accessed with the following QR code.